この章では、次の推奨事項について説明します。
ODBCを使用する場合、ODBCのすべての関数からのリターン・コードを確認することが必要です。警告やエラーが検出されると、アプリケーションでこれらを適切に処理する必要があります。次の2つの項では、発生する可能性がある最も重要なエラーについて説明します。
TimesTenがこれらのコードの記述に使用するエラー・コードとニーモニックの完全なリストについては、install_dir/include/tt_errCode.hファイルを参照してください。
アプリケーションによる一般的なエラー処理方法の概要は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクションの管理とリカバリに関する章を参照してください。
JDBC(Java)およびTTClasses(C++)を使用すると、データ・ストア関連のエラー条件の大部分に例外が返されます。これらのエラーは適切なtry/catchブロックを介して処理する必要があります。
データ・ストアは様々な理由で使用不可になる可能性があります。
TimesTenには、アプリケーションが無効なデータ・ストアに接続されていることを示す2つのエラー・コード(846(tt_ErrBadConnect)および994(tt_ErrDrtyByte))があります。アプリケーションがこれらのエラー・コードのいずれかを受信した場合、開始したすべてのトランザクションをロールバックし、データ・ストアの接続を切断して再接続してから続行する必要があります。
簡単かつ効果的な、データ・ストアの無効化エラー処理の実装については、TimesTenに付属のmonitor.cppのC++ソース・コードを参照してください。
デッドロックは、データ・ストアで2つの同時トランザクションが同じリソースを求めて競合し、それぞれが他方の継続に必要なリソースを保持しているときに発生します。デッドロックが発生すると、データ・ストアはデッドロックが発生しているトランザクションのどちらかを選択し、そのリソース要求を拒否してエラー・コード6002(tt_ErrDeadlockVictim)を返します。
ロック・タイムアウトは、データ・ストアで2つの同時トランザクションが同じリソースを求めて競合し、それらの1つが特定の時間内にリソースを取得できないときに発生します。通常、これが発生するのは、1つのトランザクションが長期間コミットせずに実行されている(したがって、長期間ロックを保持している)ときで、実行時間の長いトランザクションがロックを取得しているリソースに、他のトランザクションがロックを取得するのを回避します。ロックを取得できないトランザクションは、TimesTenからエラー・コード6003(tt_ErrTimeoutVictim)を受信します。
正しく設計されていないアプリケーションでは、デッドロックが発生しやすくなります。たとえば、複数の実行スレッドが頻繁に同じ行を同時に更新しようとすると、デッドロックが発生することがあります。
TimesTenのttXactAdminユーティリティを使用して、データ・ストアの同時実行性の問題を診断できます。『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』を参照してください。
TimesTenでは、アプリケーション開発者がデータ・ストアの同時実行性の問題を削減させるために使用する次のツールが提供されています。
TimesTenのトランザクション・ログが格納されているディスクが、チェックポイント処理が頻繁に行われないことやレプリケーションまたはXLAが遅延したことが原因で一杯になると、後続のログ・ファイルを書き込む領域がないため、データ・ストアは無効化され、自動的に再接続できなくなる可能性があります。「データ・ストアの無効化エラーの処理」を参照してください。
通常、TimesTenのトランザクション・ログ・ファイルでディスクが一杯になった場合は、ディスク上の領域の一部を解放し、データ・ストアに接続して、蓄積した不要なログ・ファイルを削除するために、すぐにチェックポイント処理を1〜2回実行します。
トランザクション・ログ・ファイルが蓄積してディスクが一杯になった原因がレプリケーションまたはXLAであった場合、トランザクション・ログ・ファイルを正常にパージするには、レプリケーションまたはXLAのブックマークを削除する必要があります。